package com.team.game.framework.Abstract;

import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Canvas;
import android.graphics.Paint;
import android.graphics.Rect;
import android.graphics.RectF;
import android.view.MotionEvent;

import com.team.game.Game.Levels;
import com.team.game.framework.Game;
import com.team.game.framework.impl.MainActivity;

import java.io.IOException;
import java.io.InputStream;

public abstract class Spell {

    protected Game game;
    protected Levels level;

    public String SPELL_NAME;

    // переменние для отрисовки кружков со скилами
    protected Bitmap Black;
    protected Bitmap ProgressBarNormal; // перезарядка
    protected Bitmap ProgressBarActive; // обычное когда заклинание активно
    protected Bitmap ProgressBarRActive; // ожидание нажатия
    protected Paint paint = new Paint(Paint.ANTI_ALIAS_FLAG); // устанавливаем сюда фильт сглаживания
    protected boolean WaitForTap = true; // по дефолту тру, можно поменять
    protected boolean Active = false;
    protected float time = 0; // время работы заклинания
    protected float TimeRecharch; // время перезарядки
    protected RectF RectDstForBlackProgress = new RectF(); // ректы для черного круга
    protected Rect RectSrcForBlackProgress = new Rect();
    protected float TopOfRectProgressDst;
    //--------------------------------------------------

    public Bitmap icon_spell;

    protected RectF ProgressBarRect = new RectF(); //рект для прогрес бара (иконка перезарядки)

    public int[] cost;

    public Spell (Game game) {
        this.game = game;

        InputStream inputStream = null;
        try {
            inputStream = MainActivity.manager.open("Picture/Gestures/FireMage/123.png");
        } catch (IOException e) {
            e.printStackTrace();
        }
        Black = BitmapFactory.decodeStream(inputStream);
        RectSrcForBlackProgress.set(0, 0, 66, 66); // не знаю этот кружок останется или исчезнет, это его размеры
        setImages ();
    }

    public Spell () {
        setImages ();
    }

    public abstract boolean updateSpell();

    public abstract boolean activeSpell(GesturesInfo gesturesInfo1);

    public abstract boolean setMotionEventSpell(MotionEvent motionEvent);

    public abstract void drawSpell(Canvas canvas);

    public abstract void restart();

    public abstract void dispose();

    //методи для отрисовки кружков перезарядки

    public void drawProgressBar(Canvas canvas) {

        if (Active) {
            if (WaitForTap)
                canvas.drawBitmap(ProgressBarRActive, null, ProgressBarRect, paint); // если заклинание активировано и мы ждем тапа (сюда можем не попасть вообще если тап не нужен)
            else {
                RectDstForBlackProgress.top = this.procentTime(TimeRecharch, time, TopOfRectProgressDst, RectDstForBlackProgress.bottom);
                RectSrcForBlackProgress.top = (int) this.procentTime(TimeRecharch, time, 0, RectSrcForBlackProgress.bottom);

                canvas.drawBitmap(ProgressBarNormal, null, ProgressBarRect, paint);
                canvas.drawBitmap(Black, RectSrcForBlackProgress, RectDstForBlackProgress, paint);
            }
        } else
            canvas.drawBitmap(ProgressBarActive, null, ProgressBarRect, paint);  // если заклинание ждет активации
    }

    public float procentTime(float TimeRecharch, float CurrentTime, float top, float bottom) {
        return top + ((bottom - top) / 100 * (CurrentTime / (TimeRecharch / 100)/*время которое прошло в процентах*/));
    }

    public void progressBarRestart() {
        Active = false;
        RectSrcForBlackProgress.top = 0;
        RectDstForBlackProgress.top = TopOfRectProgressDst;
        time = 0;
    }

    public abstract void setImages ();
    //------------------------------------

    public Paint paintText = new Paint ();

    public abstract void drowProfileExample (Canvas canvas, int A);
    public abstract void updateProfileExample ();
    public abstract void setStartConfiguration();

}
